package com.agtuigu.gmall.cart.controller;

import com.agtuigu.gmall.cart.service.CartService;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.common.util.AuthContextHolder;
import com.atguigu.gmall.model.cart.CartInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 *
 * 购物车管理controller组件
 * @author : zjj
 * @date : 2021/2/4 10:25
 */

@RestController
@RequestMapping("api/cart")
public class CartApiController {
    /**
     * 购物车管理service组件
     */
    @Autowired
    private CartService cartService;

    /**
     * 添加购物车
     * @param skuId     skuId
     * @param skuNum    数量
     * @param request   request
     * @return          处理结果
     */
    @PostMapping("addToCart/{skuId}/{skuNum}")
    public Result addToCart(@PathVariable Long skuId,
                            @PathVariable Integer skuNum,
                            HttpServletRequest request){
        String userId = AuthContextHolder.getUserId(request);
        // 未登录，也可以添加购物车
        if(StringUtils.isEmpty(userId)){
            userId = AuthContextHolder.getUserTempId(request);
        }
        // 添加到购物车
        cartService.saveToCart(skuId,userId,skuNum);

        return Result.ok();
    }

    /**
     * 获取购物车列表：
     *      登录
     *      非登录
     * @param request   request
     * @return          购物车列表
     */
    @GetMapping("cartList")
    public Result cartList(HttpServletRequest request){
        // 获取用户登录时 的id ，
        String userId = AuthContextHolder.getUserId(request);
        // 获取用户临时的Id
        String userTempId = AuthContextHolder.getUserTempId(request);
        // 查询购物车集合列表
        List<CartInfo> cartList = cartService.getCartList(userId,userTempId);

        // 将集合列表放入Result中
        return Result.ok(cartList);
    }

    /**
     * 修改购物车勾选状态
     * @param skuId     用户id
     * @param isChecked 是否勾选
     * @param request   request
     * @return          处理结果
     */
    @GetMapping("checkCart/{skuId}/{isChecked}")
    public Result checkCart(@PathVariable Long skuId ,
                            @PathVariable Integer isChecked,
                            HttpServletRequest request){
        // 获取用户Id
        String userId = AuthContextHolder.getUserId(request);
        if (StringUtils.isEmpty(userId)){
            // 获取用户临时的Id
            userId = AuthContextHolder.getUserTempId(request);
        }
        // 调用修改状态方法
        cartService.checkCart(userId,isChecked,skuId);

        return Result.ok();
    }

    /**
     * 删除购物车数据
     * @param skuId     skuId
     * @param request   request
     * @return          处理结果
     */
    @DeleteMapping("deleteCart/{skuId}")
    public Result deleteCart(@PathVariable("skuId")Long skuId,
                             HttpServletRequest request){
        // 获取到用户Id 包括登录时的用户Id，那么也包括未登录时的临时用户Id
        String userId = AuthContextHolder.getUserId(request);
        if (StringUtils.isEmpty(userId)){
            // 获取临时用户Id
            userId = AuthContextHolder.getUserTempId(request);
        }
        // userId 如果有登录的用户Id，那么它就是登录的用户Id ，如果没有userId 就是临时用户Id
        cartService.deleteCart(skuId,userId);

        return Result.ok();
    }

    /**
     * 拿到购物车勾选商品
     * @param userId    用户id
     * @return          购物车
     */
    @GetMapping("getCartCheckedList/{userId}")
    public List<CartInfo> getCartCheckedList(@PathVariable String userId){
        return cartService.getCartCheckedList(userId);
    }


}
